L06: SSH klíče

linux.edumach.cz



1. Východiska

Princip asymetrického šifrování, který si zde vysvětlíme a prakticky aplikujeme se používá na mnoha místech v digitálním světě. Zde je několik příkladů, kde se tento princip uplatňuje. Některé z nich běžně používáte aniž byste tušili, "že tam jsou":

  1. SSL/TLS (Secure Sockets Layer / Transport Layer Security) – Používá se pro zabezpečení komunikace mezi webovým prohlížečem a serverem (např. při přístupu na webové stránky pomocí HTTPS). Asymetrická šifrování zajistí bezpečný přenos symetrického klíče, který se pak používá pro rychlé šifrování samotné komunikace.

  2. E-mailová šifrování (PGP - Pretty Good Privacy) – Umožňuje uživatelům šifrovat a podepisovat e-maily. PGP používá asymetrickou šifru, aby zajistilo, že pouze zamýšlený příjemce (s odpovídajícím soukromým klíčem) může e-mail dešifrovat.

  3. Digitální podpisy – Používají se k ověření autenticity a integrity zpráv či dokumentů. Digitální podpis je vytvořen pomocí soukromého klíče, a kdokoli s veřejným klíčem může ověřit, zda je podpis pravý a zda dokument nebyl změněn.

  4. Kryptoměny (např. Bitcoin) – Asymetrické šifrování zajišťuje zabezpečení transakcí. Každý uživatel má dvojici klíčů, z nichž jeden je soukromý (pro podepisování transakcí) a druhý veřejný (pro ověření těchto podpisů).

  5. VPN (Virtual Private Network) – VPN často používají asymetrické šifrování k bezpečnému nastavení spojení mezi uživatelem a VPN serverem, čímž se zajišťuje soukromí a bezpečnost přenášených dat.

Tyto příklady ukazují, jak široké je použití asymetrického šifrování v moderních technologiích.

2. Autentizace heslem

Pro autentizaci uživatele vzdálenému systému se běžně používá kombinace dvou údajů: jména a hesla. Pokud heslo, které uživatel pošle spolu s uživatelským jménem, je heslo, které má server u daného uživatele uložené v databázi hesel, uživatel je autentizován.

Funguje to tak, že heslo se v klientském počítači zahashuje (vytvoří se jeho otisk příslušným algoritmem dané distribuce (MD5, openssl, yescrypt...) a tento otisk se odešle na server. Tam systém zkontroluje, zda je otisk stejný s tím, který má u uživatele uložený. Pokud otisky souhlasí, je uživatel autentizován.

U těchto šifrovacích algoritmů platí dvě pravidla:

  1. Stejný řetězec znaků vždy vygeneruje stejný otisk
  2. Z otisku nejde "dešifrovat" původní řetězec (jednosměrné šifrování)

3. SSH klíč

Používání SSH klíčů je bezpečný způsob autentizace ke vzdálenému serveru. SSH klíč je číslo o délce několika kilobitů. Jedná se o kryptografický prostředek, který se skládá ze dvou částí:

  1. Veřejný klíč je veřejně publikovatelným prostředkem. Tímto klíčem je možné zašifrovat zprávu, nelze ji ale v rozumném čase rozšifrovat. Z veřejného klíče nelze vypočítat klíč privátní.
  2. Privátní klíč je určen výhradně majiteli a měl by být bezpečně skladován. Tímto klíčem je jeho majitel schopen rozšifrovat zprávu, zašifrovanou veřejným klíčem. Z privátního klíče je vypočítán klíč veřejný. Soukromý klíč nikdy nikomu nedávejte. Je to totéž, jako byste mu dali své heslo.

Shrnuto: Veřejný klíč nahrajeme na vzdálený server, soukromý si necháme u sebe na lokálním počítači (a důkladně jej chráníme před odcizením).

3.1. Jak autentizace funguje

Je to v zásadě velmi prosté. Server musí mít k dispozici veřejný klíč osoby, která má právo být systémem ověřena. Pomocí tohoto klíče zašifruje tzv. "výzvu" (blok náhodných dat) pro klienta, který pomocí privátního klíče prokáže, je-li schopen tuto výzvu správně dešifrovat.

Pokud server obdrží od klienta správně dešifrovanou výzvu, ověří tím, že klient má k dispozici příslušný privátní klíč a ověří jej. V opačném případě mu je přístup odepřen.

Výhodou je, že privátní klíč ani heslo se během tohoto procesu ověřování sítí neposílá.

3.2. Klíč vs. heslo

Proč je klíč lepší než heslo:

Proč je klíč horší než heslo:

Poznámka: současná doporučení radí generovat klíč s délkou 4096 bitů namísto "pouhých" 2048 bitů. Důvod je prostý: současný výpočetní výkon farem grafických karet je gigantický. Těřaři kryptoměn by mohli vyprávět.

3.3. Generování klíčů

FAQ: občas slyším: "Bojím se to vyzkoušet. Nemůžu si tím např. zablokovat přístup na server?" Odpověď zní: v žádném případě ne. Možnost přihlašování heslem zůstane vždy aktivní.

V příkazovém řádku Windows (nebo terminálu macOS/Linux) zadejte následující příkaz (nám na ukázku postačí délka 2048 bitů):

ssh-keygen -t rsa -b 2048 

Všechny dotazy stačí „odentrovat“ (pro zvýšení ochrany je možné privátní klíč chránit heslem – my se obejdeme bez něj):

Generating public/private rsa key pair. 
Enter file in which to save the key (C:\Users\machac/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in C:\Users\machac/.ssh/id_rsa. 
Your public key has been saved in C:\Users\machac/.ssh/id_rsa.pub. 
The key fingerprint is: 
SHA256:7fIrCNcQ4xl1pDa7XM5swLjDgRlwveEt5giAuzT+TSE machac@PC 
The key's randomart image is: 
+---[RSA 2048]----+ 
|=.B+.            | 
|.Xoo.o           | 
|oo.+* .          | 
|.+o+ o oS..      | 
| .o * + =.       | 
|  .o X ..+.      | 
|   .o + oo       | 
|   ..  . .o.     | 
+----[SHA256]-----+ 

Ve složce

C:\users\<jmeno>\.ssh\ 

se vytvořily dva soubory (klíče) ve formátu OpenSSH:

Oba klíče jsou prosté textové soubory obsahující pouze alfanumerické znaky.

Všimněte si, že tečka u .ssh nemá ve Windows význam "skrytý".

3.4. Aktivace veřejného klíče na serveru

Obsah souboru id_rsa.pub potřebujeme uložit do souboru ~/.ssh/authorized_keys na TuXovi. Část provedeme v místním terminálu, dokončíme na TuXovi:

(1) Příkazy v PowerShellu Windows:

$ ssh 10XPrijmeniJ@tux.panska.cz "mkdir -p ~/.ssh" 
$ cd .ssh 
$ scp .\id_rsa.pub 10XPrijmeniJ@tux.panska.cz:~/.ssh 

(2) Příkazy v terminálu TuXe (po přihlášení):

$ cd .ssh 
$ cat id_rsa.pub >> authorized_keys 
$ chmod 600 authorized_keys 
$ cat authorized_keys 
$ rm id_rsa.pub 

3.5. Zkouška funkčnosti

Před testem funkčnosti se ze serveru odhlaste:

$ logout 

a vyzkoušejte se přihlásit pomocí klíčů (bez hesla):

ssh 10XPrijmeniJ@tux.panska.cz 

Pokud jste neudělali chybu v nastavení, systém vás přihlásí bez nutnosti zadávat heslo.

3.6. Dávkový soubor tux.bat

Pro snazší spouštění na Windows si můžete např. na Ploše vytvořit tzv. dávkový soubor s názvem např. tux.bat, do kterého zapíšete příkaz:

ssh 10XPrijmeniJ@tux.panska.cz 

Na server se připojíte jednoduše poklepáním na tento soubor.

K vytvoření stačí Poznámkový blok, kde při ukládání zvolíte "Všechny soubory (*.*)" a jako název zadáte tux.bat. Jinak si uložíte soubor s názvem tux.bat.txt.

Pozn: "Dávkový soubor" je prostý textový soubor s příponou .bat. V Linuxu je tomu říká "skript".

3.7. Přenos privátního klíče do jiného počítače

Pokud se chcete i doma přihlašovat bez hesla, stačí si soubor s privátním klíčem id_rsa přenést do tohoto počítače a uložit ho do stejné složky:

4. Možné problémy a jejich řešení

Pokud vám přihlašování klíčem nefunguje, např.:

smažte soubor known_hosts ve svém profilu:

C:\Users\<jmeno>\.ssh\known_hosts 

Tím se "resetují" všechna dříve uložená (ověřená) spojení.